Eu alertei que ocorreriam problemas por usar o guid, o deathlist passou a salvar o guid ao invez do uid, logicamente onde mais ele acessa deve tentar encontrar pelo uid alternativamente. Para fazer sem ser assim, teria que criar um outro array, talvez seja até mais trabalhoso.
- Forums
- OTServ
- Recursos
- Linguagens de Programação
- [c++] passive system
11 minutos atrás, dalvorsn disse:Eu alertei que ocorreriam problemas por usar o guid, o deathlist passou a salvar o guid ao invez do uid, logicamente onde mais ele acessa deve tentar encontrar pelo uid alternativamente. Para fazer sem ser assim, teria que criar um outro array, talvez seja até mais trabalhoso.
em vez de usar o guid será que não consigo usar o uid não? No função do target ou do addDamage?
8 minutes ago, Kilowog said:
em vez de usar o guid será que não consigo usar o uid não? No função do target ou do addDamage?
Não adiantaria, porque o uid é temporario, quando o player deslogar esse uid perde referencia.
Agora, dalvorsn disse:Não adiantaria, porque o uid é temporario, quando o player deslogar esse uid perde referencia.
Mas ele só deslogaria quando saisse de Battle não? Come seria a ideia da lista?
Just now, Kilowog said:
Mas ele só deslogaria quando saisse de Battle não? Come seria a ideia da lista?
A lista permanece enquanto o monstro estiver vivo, te dar um exemplo de algo que aconteceria, se eu ataco o pokemon e corro, espero o battle e deslogo, e eu volto perto dele novamente, ele ja nao vai mais reconhecer que esse player atacou ele porque ele relogou. Caso ele morra aconteceria a mesma coisa.
Se isso que foi citado acima não é problema, então basta modificar para:
uint32_t id = creature->getID(); if(creature->getMaster() && creature->getMaster()->getPlayer()) id = creature->getMaster()->getID(); if (isPassive() && !hasBeenAttacked(id)) { return false; }
e
void CreatureaddDamagePoints(Creature* attacker, int32_t damagePoints){ if(damagePoints < 0) return; uint32_t attackerId = 0; if(attacker){ if(attacker->getMaster() && attacker->getMaster()->getPlayer()) attackerId = attacker->getMaster()->getID(); else attackerId = attacker->getID(); }
2 minutos atrás, dalvorsn disse:A lista permanece enquanto o monstro estiver vivo, te dar um exemplo de algo que aconteceria, se eu ataco o pokemon e corro, espero o battle e deslogo, e eu volto perto dele novamente, ele ja nao vai mais reconhecer que esse player atacou ele porque ele relogou. Caso ele morra aconteceria a mesma coisa.
Se isso que foi citado acima não é problema, então basta modificar para:
uint32_t id = creature->getID(); if(creature->getMaster() && creature->getMaster()->getPlayer()) id = creature->getMaster()->getID(); if (isPassive() && !hasBeenAttacked(id)) { return false; }
e
void CreatureaddDamagePoints(Creature* attacker, int32_t damagePoints){ if(damagePoints < 0) return; uint32_t attackerId = 0; if(attacker){ if(attacker->getMaster() && attacker->getMaster()->getPlayer()) attackerId = attacker->getMaster()->getID(); else attackerId = attacker->getID(); }
Entendi, seria como eu pretendia fazer inicialmente quando vi o problema, com lista.
Porém meu conhecimento é bom em Java e não tanto em C++, são linguagens parecidas porém as lib são diferentes. Vou dá uma estudada nesse conceito da lista e ver o que consigo fazer, mas sua solução é uma boa também.
info
Group: Diretor
Joined: 12/05/12
Posts: 818
Reputation: +578
Gender: Masculino
Tibia Character: [ADM] Night

6 minutos atrás, dalvorsn disse:A lista permanece enquanto o monstro estiver vivo, te dar um exemplo de algo que aconteceria, se eu ataco o pokemon e corro, espero o battle e deslogo, e eu volto perto dele novamente, ele ja nao vai mais reconhecer que esse player atacou ele porque ele relogou. Caso ele morra aconteceria a mesma coisa.
Se isso que foi citado acima não é problema, então basta modificar para:
uint32_t id = creature->getID(); if(creature->getMaster() && creature->getMaster()->getPlayer()) id = creature->getMaster()->getID(); if (isPassive() && !hasBeenAttacked(id)) { return false; }
e
void CreatureaddDamagePoints(Creature* attacker, int32_t damagePoints){ if(damagePoints < 0) return; uint32_t attackerId = 0; if(attacker){ if(attacker->getMaster() && attacker->getMaster()->getPlayer()) attackerId = attacker->getMaster()->getID(); else attackerId = attacker->getID(); }
Como isso seria um problema? na verdade esse seria o modo correto, na minha opinião é bem melhor.
@dalvorsn eu consigo pegar um uid pelo guid? Digamos, tem uma função facil que dá isso e tal?
5 minutes ago, Kilowog said:@dalvorsn eu consigo pegar um uid pelo guid? Digamos, tem uma função facil que dá isso e tal?
Sim, facilmente.
C++
g_game.getPlayerByGUID(guid)
Lua
getPlayerByGUID(guid)
Edited Junho 14 by dalvorsn
o certo é o que o da dalvorsn falo ao deslogar o player ainda ficaria na lista.
info
Group: Conde
Joined: 03/11/11
Posts: 714
Reputation: +67
Gender: Masculino
Tibia Character: esqueci 20+

5 horas atrás, Kilowog disse:Pode sim, sem problema nenhum. A ideia do topico é ajudar a todos, não ganhar +rep.
@Ceetros poderia disponibilizar pra versão 0.3.6?
info
Group: Conde
Joined: 14/04/15
Posts: 956
Reputation: +333
Gender: Masculino

Deu certo @Kilowog ?? Diz ae as novidades
info
Group: Conde
Joined: 14/04/15
Posts: 956
Reputation: +333
Gender: Masculino

@Kilowog Novidades?





info
Group: Campones
Joined: 23/12/15
Posts: 33
Reputation: +21
Gender: Masculino
Pode sim, sem problema nenhum. A ideia do topico é ajudar a todos, não ganhar +rep.